lib.use(['element', 'form','laydate','table','searchInput','btnProp','tablePlug'], function () {
    var layer = layui.layer;
    var form = layui.form;
    var laydate = layui.laydate;
    var searchInput = layui.searchInput;
    var btnProp = layui.btnProp;
    var formForm = layui.Form('formForm');
    var table = layui.table;
    var tablePlug = layui.tablePlug;//表格插件
    var inLineTable;
    var reqUrl;
    var id;
    table.set(common.layui.table.config(tablePlug));

    //各种控件初始化
    initControl();

    //表单提交方法
    form.on('submit(addFormSubmitFilter)', formSubmit);

    var tableConfig={
        elem: '#inLineTable'
        ,toolbar: '#toolbar'
        ,even: true
        , cols: [[
             { field: 'id',  hide: true }
            ,{ title: '商品ID', field: 'goodsId',hide:true}
            ,{ title: '基本单位ID', field: 'baseUomId',hide:true}
            ,{ title: '库存单位ID', field: 'qtyUomId', hide:true}
            ,{ title: '辅助单位ID', field: 'auxUomId', hide:true}
            ,{type:'checkbox',rowspan:2}
            ,{type: 'numbers', title: '编号',rowspan:2 }
            ,{ title: '商品信息',colspan:7,align:'center'}
            ,{ title: '基本数量信息',colspan:2,align:'center'}
            ,{ title: '库存数量信息',colspan:3,align:'center'}
            ,{ title: '辅助数量信息',colspan:3,align:'center'}
            //,{ title: '商品挂牌价', field: 'goodsListPrice'}
            //,{ title: '商品折扣', field: 'goodsDiscount',edit:'text',}
            ,{ title: '备注', field: 'remark',edit:'text',rowspan:2}
        ],[
             { title: '商品编码', field: 'goodsCode',rowspan:2}
            ,{ title: '商品名称', field: 'goodsName',rowspan:2}
            ,{ title: '商品型号', field: 'goodsModel',rowspan:2}
            ,{ title: '商品规格', field: 'goodsSpec',}
            ,{ title: '商品单价', field: 'goodsPrice',edit:'number'}
            ,{ title: '商品金额', field: 'goodsAmount',}
            ,{ title: '商品挂牌价', field: 'goodsListPrice'}

            ,{ title: '基本数量', field: 'baseNum',}
            ,{ title: '基本单位', field: 'baseUomName',}

            ,{ title: '库存数量', field: 'qtyNum',edit:'number',}
            ,{ title: '库存单位', field: 'qtyUomName',}
            ,{ title: '件换算', field: 'converUnit1',}

            ,{ title: '辅助数量', field: 'auxNum',edit:'number',}
            ,{ title: '辅助单位', field: 'auxUomName',}
            ,{ title: '片换算', field: 'converUnit1',}
        ]]
    };
    //=====================================================从表==========================================================
    // 渲染从表表格
   inLineTable = table.render(tableConfig);

    //明细添加按钮
    btnProp.render($.extend(BASE_GOODS_CONFIG_MULTIPLE,{
        dst: '#add',
        done:function(ck){
            addRowLine(ck.data);
        }
    }));



    //添加采购按钮
    btnProp.render($.extend(POS_PURCBASE_CONFIG_SINGLE,{
        dst: '#addPosFilter',
        done:function(ck){
            addPosHead(ck.data);
        }
    }));
    //头工具栏事件
    table.on('toolbar(inLineTableFilter)', function(obj){
        var checkStatus = table.checkStatus(obj.config.id);
        if(obj.event=='del'){
            delLine(table.checkStatus('inLineTable'))
        }

    })

    // 监听编辑如果商品数量为非正整数时默认为1 并且弹出提示信息并且重新获得焦点等待输入
    table.on('edit(inLineTableFilter)', rowEditFun);



    /**
     * 页面加载完成调用方法
     * 初始化方法可以写在这里
     */
    (function () {
        id=common.util.getParam('id');
        id?loadFormData(id):addInit();
    })();


//=====================================================各种自定义方法==========================================================


    /**
     * 页面控件初始化
     */
    function initControl() {

        //仓库名称弹出窗口
        searchInput.render($.extend(BASE_WAREHOUSE_CONFIG_SINGLE,{
            dst: '#warehouseNameSearchInput',
            done:function (obj,nextObj,datas) {
                var data={
                    warehouseId:datas[0].id,
                    warehouseCode:datas[0].warehouseCode,
                    warehouseName:datas[0].warehouseName,
                }
                form.val('formForm',data);
            }
        }));

        //填冲下拉框数据字典
        //<select name="dbType" dist-name="sys.Ent_DbTypeEnum" config='{"data": [{"value": "全部","key": "0","index":"2"}],"selectedIndex": "1"}'></select>
        //config:{
        //    data:{[                 自定义下拉框数据
        //          value:'全部',      显示文字
        //          key:0,            值
        //          index:1           当前值需要插入位置(累加完自定义数据后再从下标从0计算)
        //          ]},
        //    selectedIndex:1         当前下拉框默然选中位置（下标从0计算)
        // }
        formForm.selectRender();

        /**
         * Form表单校验
         */
        form.verify({
            inDate: function(value, item){
                if(!value){
                    return '入库日期不能为空';
                }
            },
            warehouseCode: function(value, item){
                if(!value){
                    return '仓库编码不能为空';
                }
            },
            warehouseName: function(value, item){
                if(!value){
                    return '仓库名称不能为空';
                }
            },
        });
    }

    /*function formSubmit(data) {
        var param = formForm.getData();
        param.inLineEntityList=table.cache['inLineTable'];
        param=beforeSave(param);
        common.ajax.post(reqUrl, param, function (resp) {
            afterSave(resp);
            common.util.alert('操作成功', function () {
                location.href = 'inHeadList.html';
            })
        })
        return false;
    }*/
    function formSubmit(data) {
        var param = formForm.getData();
        param.inLineEntityList=table.cache['inLineTable'];
        param=beforeSave(param);
        /*console.log(param)*/
        common.ajax.post(reqUrl, param, function (resp) {
            afterSave(resp);
            common.util.alert('操作成功', function () {
                common.util.returnWindow('inHeadList.html')
            })
        })
        return false;
    }
    /**
     * 删除明细行
     * @param obj
     */
    function delLine(obj) {
        // 获得当前选中的，不管它的状态是什么？只要是选中的都会获得
        var checkedIds;
        if (inLineTable.config.checkStatus) {
            // 开启了复选状态记忆
            checkedIds = tablePlug.tableCheck.getChecked(inLineTable.config.id);
        } else {
            // 不开启
            checkedIds = table.checkStatus(inLineTable.config.id).data;
        }
        if(checkedIds.length==0)return;
        layer.confirm('确认删除!', function(index){
            tablePlug.del(inLineTable.config.id, checkedIds);
            layer.close(index);
            layer.msg('删除成功！', {icon: 1});
        });
    }



    function addPosHead(data) {


        var _tableConfig=$.extend(tableConfig,{cols:
                [[
                    { field: 'id',  hide: true }
                    ,{ title: '商品ID', field: 'goodsId',hide:true}
                    ,{ title: '基本单位ID', field: 'baseUomId',hide:true}
                    ,{ title: '库存单位ID', field: 'qtyUomId', hide:true}
                    ,{ title: '辅助单位ID', field: 'auxUomId', hide:true}
                    ,{type:'checkbox',rowspan:2}
                    ,{type: 'numbers', title: '编号',rowspan:2 }
                    ,{ title: '商品信息',colspan:7,align:'center'}
                    ,{ title: '基本数量信息',colspan:4,align:'center'}
                    ,{ title: '库存数量信息',colspan:5,align:'center'}
                    ,{ title: '辅助数量信息',colspan:5,align:'center'}
                    ,{ title: '备注', field: 'remark',edit:'text',rowspan:2}
                ],[
                    { title: '商品编码', field: 'goodsCode'}
                    ,{ title: '商品名称', field: 'goodsName'}
                    ,{ title: '商品型号', field: 'goodsModel'}
                    ,{ title: '商品规格', field: 'goodsSpec',}
                    ,{ title: '商品单价', field: 'goodsPrice'}
                    ,{ title: '商品金额', field: 'goodsAmount',}
                    ,{ title: '商品挂牌价', field: 'goodsListPrice'}

                    ,{ title: '采购数量', field: 'posBaseNum',}
                    ,{ title: '已入库数量', field: 'inBaseNum',}
                    ,{ title: '基本数量', field: 'baseNum',}
                    ,{ title: '基本单位', field: 'baseUomName',}

                    ,{ title: '采购数量', field: 'posQtyNum',}
                    ,{ title: '已入库数量', field: 'inQtyNum',}
                    ,{ title: '库存数量', field: 'qtyNum',edit:'number',}
                    ,{ title: '库存单位', field: 'qtyUomName',}
                    ,{ title: '件换算', field: 'converUnit1',}

                    ,{ title: '采购数量', field: 'posAuxNum',}
                    ,{ title: '已入库数量', field: 'inAuxNum',}
                    ,{ title: '辅助数量', field: 'auxNum',edit:'number',}
                    ,{ title: '辅助单位', field: 'auxUomName',}
                    ,{ title: '片换算', field: 'converUnit1',}
                ]]})
        // 渲染从表表格
        inLineTable = table.render(_tableConfig);
        common.ajax.get('/pos/purchaseHead/info/'+data[0].id, {}, function (resp) {
            var defVal= {
                isValid: 1,
                inDate: common.util.getDate(),
                inState: 1,
                inType: 1,
                sourceId:resp.purchaseHead.id,
                sourceNo:resp.purchaseHead.purchaseNo,
            }
            formForm.setData(defVal);

            var data=[];
            $.each(resp.purchaseHead.purchaseLineEntityList,function () {
                this.posBaseNum=this.baseNum;
                this.posQtyNum=this.qtyNum;
                this.posAuxNum=this.auxNum;
                this.baseNum=this.baseNum-this.inBaseNum;
                this.qtyNum=this.qtyNum-this.inQtyNum;
                this.auxNum=this.auxNum-this.inAuxNum;
                data.push(this);
            })

            common.layui.table.get('inLineTable').load(data);
        });
        console.log(data)
    }
    /**
     * 明细行编辑事件
     * @param obj
     */
    function rowEditFun(obj) {

        var converData = busCommon.conver(obj.data);
        var data = {
            baseNum:converData.baseNum,
            goodsAmount:converData.baseNum * converData.goodsPrice - converData.goodsDiscount
        }
        console.log(data);
        obj.update(data);
    }

    /**
     * 明细行添加后调用方法
     * @param datas
     */
    function addRowLine(_datas) {
        var newDatas=[];
        $.each(_datas,function () {
            //属性更换
            this.goodsPrice=this.listPrice;
            this.goodsId=this.id;//商品IDsa
            this.goodsAmount = 0; // 商品全额
            this.goodsDiscount = 0; // 商品折扣
            this.baseNum=0;
            newDatas.push(this)
        })
        var config=
            {
                table:table,
                tableObj:inLineTable,
                fromPk: "goodsId",
                toPk:"goodsId",
                datas:newDatas,
                done: function (obj,newObj) {
                    obj.goodsNum+=newObj.goodsNum;
                    return obj;
                }
            }
        common.layui.table.addRows(config);
    }
    /**
     * 编辑时加载数据
     */
    function loadFormData(id) {
        common.ajax.get('/inv/inHead/info/'+id, {}, function (resp) {
            var data=afterLoadFormData(resp.inHead);
            formForm.setData(updateInit(data));
            common.layui.table.get('inLineTable').load(data.inLineEntityList);

        });
    }

    /**
     * 编辑时加载数据
     */
    function afterLoadFormData(inHead) {
        //状态特殊业务时对操作按钮的禁用
        if(inHead.inState==2){
            inLineTable = table.render(common.layui.table.readOnly(tableConfig));
            common.util.disabledBtnInput("#returnBtn");

        }

        return inHead;

    }

    /**
     * 新增调用方法
     *
     */
    function addInit() {
        //新增
        reqUrl='/inv/inHead/save';
        //设置新增初始值
        var defVal={
            isValid:1,
            inDate:common.util.getDate(),
            inState:1,
            inType:3,
            //orderDate:common.util.getDate()
        }
        formForm.setData(defVal);
        $('.disabled-row').hide();
    }

    /**
     * 修改调用方法
     * @param data 当前对像参数
     * @returns {*}
     */
    function updateInit(data) {
        reqUrl='/inv/inHead/update';
        //更新时的其它操作
        return data
    }


    /**
     * 保存前调用方法
     * @param param
     * @returns {*}
     */
    function beforeSave(data) {
        //保存前的其它操作
        return data;
    }
    /**
     * 保存后调用方法
     */
    function afterSave(data) {
        //保存后的其它操作
    }
});
